package com.itheima.day16.reflect.test7;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

//        Method类用于执行方法的方法
public class Test {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException {
//        Object invoke(Object obj, Object... args)	运行方法
        // 参数一：用obj对象调用该对象
        // 参数二：调用方法的传递的参数（如果没有就不写）
        // 返回值：方法的返回值（如果没有就不写）

        // 获得公共的带参有返回值
        // method1();

        // 1.获得class对象
        Class className = Class.forName("com.itheima.day16.reflect.test7.Student");

        // 2.获得私有的，有参有返回值，show2方法的Method对象
        Method method = className.getDeclaredMethod("show2", String.class);

        // 3.创建一个student对象，作为方法的调用者
        Student student = (Student) className.newInstance();

        // 4.取消访问权限
        method.setAccessible(true);

        // 5.使用方法
        String invoke = (String) method.invoke(student, "张帆");

        // 6.打印返回值
        System.out.println(invoke);


    }

    private static void method1() throws ClassNotFoundException, NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
        // 1.获得class对象
        Class className = Class.forName("com.itheima.day16.reflect.test7.Student");

        // 2.获得公共的带参有返回值，function4方法的Method对象
        Method method = className.getMethod("function4", String.class);

        // 3.创建一个Student对象，作为方法的调用者
        Student student = (Student) className.newInstance();

        // 4.用invoke方法运行方法
        String invoke = (String) method.invoke(student, "张帆");

        // 5.打印
        System.out.println(invoke);
    }
}
